<?php
// $Id$

/**
 * Controller_Users 控制器
 */
class Controller_Users extends Controller_Abstract
{

	function actionIndex()
	{
        // 为 $this->_view 指定的值将会传递数据到视图中
		# $this->_view['text'] = 'Hello!';
	}
	
		/*
	*登录
	*/
    function actionLogin()
    {
        $form = new Form_UserLogin('index.php?controller=users&action=login');
        $form->_subject = '登录';
        if ($this->_context->isPOST() && $form->validate($_POST))
        {
            try
            {
                // 使用 acluser 插件的 validateLogin() 方法验证登录并取得有效的 user 对象
                $user = User::meta()->validateLogin($form['username']->value, $form['password']->value);
                // 将登录用户的信息存入 SESSION，以便应用程序记住用户的登录状态
                $this->_app->changeCurrentUser($user->aclData(), 'MEMBER');
  //              echo "alert('hi');";
                //print_r($this->_app->currentUser());
                // 登录成功后，重定向浏览器
                $arr = array();
                $arr["user"] = $user->username;
                $arr["password"] = true;
                $json = json_encode($arr);
                echo "loginCallback(".$json.");";
            }
            catch (AclUser_UsernameNotFoundException $ex)
            {
                //$form['username']->invalidate("您输入的用户名 {$form['username']->value} 不存在");
                $arr = array();
                $arr["user"] = false;
                $arr["password"] = true;
                $json = json_encode($arr);
                echo "loginCallback(".$json.");";
            }
            catch (AclUser_WrongPasswordException $ex)
            {
                $form['password']->invalidate("您输入的密码不正确");
                $arr = array();
                $arr["user"] = true;
                $arr["password"] = false;
                $json = json_encode($arr);
                echo "loginCallback(".$json.");";
            }
        }
        else
        {
            $arr = array();
            $arr["user"] = false;
            $arr["password"] = false;
            $json = json_encode($arr);
            echo "loginCallback(".$json.");";	
        }

        //$this->_view['form'] = $form;
        //$this->_viewname = 'register';
    }

    /**
     * 注销
     */
    function actionLogout()
    {
        $this->_app->cleanCurrentUser();
        return $this->_redirect(url('default/index'));
    }

    /**
    * 注册
    */
    function actionRegister()
    {
        try
        {
            // 构造表单对象
            $form = new Form_Register('index.php?controller=users&action=register');

            if ($this->_context->isPOST() && $form->validate($_POST))
            {
                // 是 POST 提交，并且表单验证通过
        //		echo('post<br>');
                try
                {
                    // 创建 user 对象并保存
                    $values = $form->values();
                    $user = new User($form->values());
                    $time_now = gettimeofday();
                    $time_now_version = $time_now["sec"] . $time_now["usec"];
                    $user->user_id = $time_now_version;
                    $user->save(99,'create');
                    $user1 = User::meta()->validateLogin($form['username']->value, $form['password']->value);
               	    $this->_app->changeCurrentUser($user1->aclData(), 'MEMBER');
           //         print_r($user);
                    $arr = array();
                    $arr["user"] = $user->username;
                    $json = json_encode($arr);
                    echo "registerCallback(".$json.");";

		    
            //        echo $values['callback'] . '()';
                   
                    // 成功后重定向到登录页面
                  /*  return $this->_redirectMessage(
                        '注册新用户', 
    //					dump($user->username, '新建用户的用户名'),
    //					dump($user->password, '新建用户的密码'),
    //					dump($user->id(), '新建用户的ID'),
                       '您的新帐户已经注册成功，请输入用户名和密码登录。',
                        url('users/login'));*/
                        
                }
                catch (AclUser_DuplicateUsernameException $ex)
                {
                    $arr = array();
                    $arr["user"] = null;
                    $json = json_encode($arr);
                    echo "registerCallback(".$json.");";;
                    // 捕获 AclUser_DuplicateUsernameException 异常，在表单中指出用户名存在重复问题
                   $form['username']->invalidate("您要注册用户名 {$user->username} 已经存在了");
   //                 print_r($ex);
                }
            }

            // 将表单对象传递给视图
           //$this->_view['form'] = null;
        }
        catch (Exception $ex)
        {
            print_r($ex);
        }
    }
	
	function actionChangePasswd()
    {
        $form = new Form_ChangePasswd(url('users/changepasswd'));
     
        if ($this->_context->isPOST() && $form->validate($_POST))
        {
            try
            {
                // 取得当前用户的信息
                $current_user = $this->_app->currentUser();
                // 修改密码
                User::meta()->changePassword(
                    $current_user['username'],
                    $form['new_password']->value,
                    $form['old_password']->value
                );
                // 重定向浏览器
                return $this->_redirectMessage(
                    '修改密码成功',
                    '您的登录密码已经成功修改，下次登录请使用新密码。',
                    url('default/index'));
            }
            catch (AclUser_WrongPasswordException $ex)
            {
                $form['old_password']->invalidate('您输入的现用密码不正确');
            }
        }
     
        $this->_view['form'] = $form;
        $this->_viewname = 'register';
	}
	
	function actionCurrentUser()
	{
		$arr = array();
		if($this->_app->currentUser()){
			$arr["stat"] = "true";
			$arr["user"] = $this->_app->currentUserObject()->username;
		}
		else
		{
			$arr["stat"] = "false";
		}
		$json = json_encode($arr);
		echo "login_callback(". $json .");";
	}

	function actionCheckDuplicate()
	{
		$user = User::find("username=?", $this->_context->username)->query();	
		$arr = array();	
		if($user->username == "")
		{
			$arr["result"]=false;			
		}
		else
		{
			$arr["result"]=true;
		}
		$json = json_encode($arr);
		echo "dupCallback(".$json.");";
	}
}


